/**
 * 
 */
package com.designpattern.design.decorator;

import com.designpattern.design.decorator.coffee.LatteCoffee;
import com.designpattern.design.decorator.decorator.Suger;

/**
 * 装饰者模式设计
 * 
 * @author zhangyang
 *
 */
public class DecoratorTest {
	public static void main(String[] args) {
		// 使用装饰者模式下一份咖啡订单
		// 拿铁咖啡+2份糖
		// 1.第一步点一杯拿铁咖啡 用drink接收来进行包装类
		Drink coffee = new LatteCoffee();
		System.out.println("拿铁咖啡花费" + coffee.cost());
		// 2拿铁咖啡加上一份糖做包装
		Drink sugerLatte1 = new Suger(coffee);
		System.out.println(sugerLatte1.getDesc());
		// 3拿铁咖啡+糖再加上一份糖做包装
		Drink sugerLatte2 = new Suger(sugerLatte1);
		System.out.println(sugerLatte2.getDesc());
		System.out.println("总价格=" + sugerLatte2.cost());

		/**
		 * 场景扩展 如果此时多一个咖啡种类 那么我们只需要在coffee实现层多一个子类就完事了 并且这个子类什么调料都能加 如果我们现在多了一种调味品豆浆
		 * 那么我们在Decorator的子类里面多谢一个子类完事了 并且这个调味品那个咖啡都能用并且也能无限加 代码扩展性极好
		 */
	}
}
